import shutil

from docx import Document
from docx.shared import Pt
from docx.oxml.ns import qn
import sys
import os
import io

# 修改标准输出的编码
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

# 把数字文件名提取出来，成数字，从小到大排序
def file_number(excel):
    file_info = os.path.splitext(excel)  # 返回一个元组如 ('1', '.xlsx')
    filename = int(file_info[0])  # 转化为纯数字
    return filename


def merge_word_documents(doc_dir):
    # 获取全部的doc
    docs = os.listdir(doc_dir)
    # 按照文件名序号从小到大排序
    sorted_files = sorted(docs, key=file_number)
    # 创建新文档，并以第一个文件的边距为基准
    first_doc = Document(os.path.join(doc_dir, sorted_files[0]))
    merged_document = Document()
    # 设置全局默认字体（西文Calibri，中文宋体）
    merged_document.styles['Normal'].font.name = 'Calibri'
    merged_document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
    # 继承第一个文档的页面边距（关键修改部分）
    if first_doc.sections:
        merged_section = merged_document.sections[0]  # 使用默认节
        # 应用边距设置
        merged_section.left_margin = Pt(70.875)
        merged_section.right_margin = Pt(70.875)
        merged_section.top_margin = Pt(39.8)
        merged_section.bottom_margin = Pt(70.875)

    # 创建一个新的文档对象
    for file in sorted_files:
        file = os.path.join(doc_dir, file)
        # 打开每个文档
        sub_doc = Document(file)
        # 复制内容
        for element in sub_doc.element.body:
            merged_document.element.body.append(element)

    # 保存合并后的文档
    merged_document.save(f"{doc_dir}.docx")

    return f"{doc_dir}.docx"


def write_log(content):
    with open('python_log.txt', 'a', encoding='utf-8') as file:
        file.write(f"{content}\n")


# 处理封面
if __name__ == '__main__':
    abs_path = merge_word_documents(sys.argv[1])
    result = abs_path.split('public/', 1)[-1]
    print(f"storage/{result}")
    if os.path.exists(sys.argv[1]):
        shutil.rmtree(sys.argv[1])
